package com.xinheyun.demo.leetcode;

/**
 * @description: TODO
 * @author: Sarah
 * @modified By: Sarah
 * @date: Created in 2021/8/30 11:22
 * @version:v1.0
 */
public class test1269 {



    public int number(int w[]){
        int i=0;
        for (int j = 0; j < 15; j++) {

        }
        return 1;
    }
}
//有一个长度为 arrLen 的数组，开始有一个指针在索引 0 处。
//
//    每一步操作中，你可以将指针向左或向右移动 1 步，或者停在原地（指针不能被移动到数组范围外）。
//
//    给你两个整数 steps 和 arrLen ，请你计算并返回：在恰好执行 steps 次操作以后，指针仍然指向索引 0 处的方案数。
//
//    由于答案可能会很大，请返回方案数 模 10^9 + 7 后的结果。
//
//     
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/number-of-ways-to-stay-in-the-same-place-after-some-steps
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

class Solution1269 {

    public static void main(String[] args) {
        Solution1269 solution1269 = new Solution1269();
        System.out.println(solution1269.numWays(4, 4));

    }
    public int numWays(int steps, int arrLen) {
        final int MODULO = 1000000007;
        int maxColumn = Math.min(arrLen - 1, steps);
        int[][] dp = new int[steps + 1][maxColumn + 1];
        dp[0][0] = 1;
        for (int i = 1; i <= steps; i++) {
            for (int j = 0; j <= maxColumn; j++) {
                dp[i][j] = dp[i - 1][j];
                if (j - 1 >= 0) {
                    //向右
                    dp[i][j] = (dp[i][j] + dp[i - 1][j - 1]) % MODULO;
                }
                if (j + 1 <= maxColumn) {
                    //向左
                    dp[i][j] = (dp[i][j] + dp[i - 1][j + 1]) % MODULO;
                }
            }
        }
        return dp[steps][0];
    }
}


